C++-এ std::unordered_set এবং std::unordered_map হলো স্ট্যান্ডার্ড লাইব্রেরির দুটি অর্ডারহীন কনটেইনার যা হ্যাশ টেবিল ব্যবহার করে কাজ করে। এগুলি সাধারণত std::set এবং std::map এর বিকল্প, তবে তারা উপাদানগুলিকে কোনো নির্দিষ্ট অর্ডারে রাখে না এবং খোঁজার গতি দ্রুত হয়, বিশেষত বড় ডেটাসেটের জন্য।
১. std::unordered_set
std::unordered_set একটি কনটেইনার যা একক মান সংরক্ষণ করে এবং এই মানগুলোকে অর্ডারহীনভাবে (unordered) রাখে। এটি হ্যাশ টেবিল ব্যবহার করে, যার ফলে অনুসন্ধান (search), যোগ (insert), এবং অপসারণ (erase) অপারেশনগুলি গড়ে O(1) সময়ে সম্পন্ন হয়, যদি হ্যাশ ফাংশন ভালভাবে কাজ করে।
বৈশিষ্ট্য:
- দ্বৈত উপাদান নিষিদ্ধ: সেটে একাধিক একি উপাদান থাকতে পারে না (যেমন,
std::setএর মতো)। - অর্ডারহীন: উপাদানগুলো একটি নির্দিষ্ট অর্ডারে রাখা হয় না।
- দ্রুত খোঁজা: উপাদান খোঁজা দ্রুত হয়, বিশেষ করে বড় ডেটাসেটের জন্য।
উদাহরণ:
#include <iostream>
#include <unordered_set>
int main() {
// unordered_set তৈরি করা
std::unordered_set<int> mySet = {10, 20, 30, 40};
// উপাদান যোগ করা
mySet.insert(50);
mySet.insert(60);
// উপাদান চেক করা
if (mySet.find(30) != mySet.end()) {
std::cout << "30 is found in the set" << std::endl;
}
// উপাদান প্রিন্ট করা
std::cout << "Elements in unordered_set: ";
for (const int& num : mySet) {
std::cout << num << " ";
}
return 0;
}আউটপুট (অর্ডার পরিবর্তিত হতে পারে):
30 is found in the set
Elements in unordered_set: 10 20 30 40 50 60২. std::unordered_map
std::unordered_map একটি কনটেইনার যা কী-ভ্যালু জোড়া (key-value pairs) সংরক্ষণ করে এবং এই জোড়াগুলোকে অর্ডারহীনভাবে (unordered) রাখে। এটি একটি হ্যাশ টেবিলের মত কাজ করে এবং গড় O(1) সময়ে কী-ভ্যালু পেয়ারগুলো অ্যাক্সেস করা সম্ভব হয়।
বৈশিষ্ট্য:
- কী-ভ্যালু জোড়া:
std::unordered_mapকনটেইনারটি প্রতিটি উপাদানে একটি কী এবং সেই কী সম্পর্কিত একটি ভ্যালু সংরক্ষণ করে। - অর্ডারহীন: উপাদানগুলো একটি নির্দিষ্ট অর্ডারে রাখা হয় না।
- দ্রুত অনুসন্ধান: কী দিয়ে ভ্যালু খোঁজার গতি দ্রুত।
উদাহরণ:
#include <iostream>
#include <unordered_map>
int main() {
// unordered_map তৈরি করা
std::unordered_map<std::string, int> myMap;
// কী-ভ্যালু যোগ করা
myMap["apple"] = 3;
myMap["banana"] = 5;
myMap["orange"] = 2;
// ভ্যালু খোঁজা
std::cout << "apple count: " << myMap["apple"] << std::endl;
// কী-ভ্যালু জোড়া প্রিন্ট করা
std::cout << "Elements in unordered_map:" << std::endl;
for (const auto& pair : myMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}আউটপুট (অর্ডার পরিবর্তিত হতে পারে):
apple count: 3
Elements in unordered_map:
banana: 5
apple: 3
orange: 2std::unordered_set এবং std::unordered_map এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | std::unordered_set | std::unordered_map |
|---|---|---|
| ডেটা স্ট্রাকচার | একক উপাদান (unique elements) | কী-ভ্যালু জোড়া (key-value pairs) |
| কী | উপাদান (ভ্যালু) | কী (key) এবং ভ্যালু (value) |
| অর্ডার | অর্ডারহীন (unordered) | অর্ডারহীন (unordered) |
| হ্যাশ টেবিল | হ্যাশ টেবিল ব্যবহার করে | হ্যাশ টেবিল ব্যবহার করে |
| গতি | গড় O(1) অনুসন্ধান (search), যোগ (insert) এবং অপসারণ (erase) | গড় O(1) অনুসন্ধান (search), যোগ (insert) এবং অপসারণ (erase) |
উপসংহার
std::unordered_set: এটি একটি কনটেইনার যা একক মান (unique values) সংরক্ষণ করে এবং অর্ডারহীনভাবে রাখে। এর ব্যবহার সাধারণত সেটের মধ্যে কোনো বিশেষ অর্ডার না রাখলেও খোঁজার গতি দ্রুত চাইলে হয়।std::unordered_map: এটি একটি কনটেইনার যা কী-ভ্যালু জোড়া সংরক্ষণ করে এবং এই জোড়াগুলোকে অর্ডারহীনভাবে রাখে।std::unordered_mapদ্রুতভাবে কী-ভ্যালু পেয়ার অ্যাক্সেস করতে সাহায্য করে।
এই কনটেইনারগুলো সাধারণত বড় ডেটাসেট এবং দ্রুত অনুসন্ধান ও যোগ/অপসারণ অপারেশন প্রয়োজন এমন পরিস্থিতিতে ব্যবহৃত হয়।
Read more